/*
    什么是发布订阅
    
    优点：他可以不去使用父传子 或者子传父 来回传参 

    缺点：你没有办发判断他到底传没传成功 
*/


class Publish {
    constructor(){
        //在这里定义了个容器
        this.events={}
    }
    //发布
    $emit(event,params){
        //假设该事件是有订阅，（对应的事件队列存在）
        if (this.events[event]) {
            //将事件队里的event 依法执行出队
            this.events[event].forEach((item) => {
                //这里携带参数 触发on方法的handler  回调
                return item(params)
            })
        }
    }

    //订阅
    $on(event,cbk){
        //判断 我们的map 中是否有这个类型
        if (!this.events[event]) {
            //若不存在，新建该对列
            this.events[event] = [cbk]
        } else {
            //若存在  直接往队列里推送 cbk
            this.events[event].push(cbk)
        }
    }

}
export default new Publish()